home *** CD-ROM | disk | FTP | other *** search
Wrap
/* Programm: PlayCDDA_YACDP.dopus5 [30-September-1995] ** $VER: PlayCDDA_YACDP.dopus5 2.1 (30-Sep-1995) ** ** Needed: Directory Opus V5.11 (© by Jonathan Potter & GPSoftware) ** YACDP V1.3 (© 1995 by Frank Würkner) ** ** SCSI-CDROM required ! ** only for save AIFF : ** CDDA V1.12 (Author: mlelstvspecklec.mpifr-bonn.mpg.de) ** only for save ADPCM3: ** CDRipper (Author: flowerpeikon.e-technik.tu-muenchen.de) ** ** Copyright © 1995 Eckhard Ludwig (EMail: Eckhard@top.east.de) ** PlayCDDA_YACDP.dopus5 is freeware. It may be distributed freely. ** ** Play Audio-CD from DOPUS5, Test Play Audio-CD, Save Tracks to ** CDR, IFF 8SVX, AIFF & ADPCM3. ** ** Create new button (Audio-CD), Call as: ** ---------------------------------------------------------------------- ** ARexx DOpus5:ARexx/PlayCDDA_YACDP.dopus5 {Qp} ** ---------------------------------------------------------------------- ** Set all attribut off. */ /*--------S E T T I N G S : --------------------------------------------*/ /* Path to YACDP V1.3 (© 1995 by Frank Würkner) (Run needed L:WBStart-Handler & C:WBStarter!) */ CDPlay = "WORK:YACDP/YACDP" /* Please edit your path ! */ /* Path to CDDA V1.12 */ CDSave = "C:CDDA" /* only for save AIFF */ /* Path to CDRipper */ CDRip = "C:CDRipper" /* only for save ADPCM3 */ /*-Volume Settings------------------------------------------------------*/ CDROMVOLUME=255 /* 1 to 255 (For play via CDROM) */ AMIGAVOLUME=65 /* 1 to 65 (For play via Amigaaudio) */ /* 0 = no volumesetting & no balancesetting */ PLAYVIASCSI=0 /* 0=off (Play via CDROM) 1=on (Play via SCSI/Amigaaudio)*/ /*--end of settings------------------------------------------------------*/ if ~show('l','rexxsupport.library') then call addlib('rexxsupport.library',0,-30,0) if ~openport('cdda-handler') then exit /* init locale */ if ~show(l,'locale.library') then call addlib('locale.library',0,-30) if show(l,'locale.library') then catalog=opencatalog('PlayCDDA_YACDP.catalog','deutsch',0) parse arg portname if portname='' then portname='DOPUS.1' address value portname signal on syntax options results options failat 20 lf='0a'x if ~show('P','YACDP') then do if ~exists(CDPlay) then do dopus front dopus request '"'getcatstr(0,'Fehler:'lf'YACDP nicht gefunden (Pfad: %s ?).'lf'Setze Pfad oder starte YACDP V1.3 zuerst !',CDPlay)'"' getcatstr(1,'Beenden') Exit end if ~exists("C:WBStarter") then do dopus front dopus request '"'getcatstr(2,'Fehler:'lf' C:WBStarter nicht gefunden. Starte YACDP V1.3 zuerst !')'"' getcatstr(1,'Beenden') Exit end address command "C:WBStarter "||CDPlay address command 'waitforport YACDP' end address value portname lister new handle=result do forever /* Schleife bei CD-Wechsel */ address 'YACDP' 'HIDE' 'GETVAR STATUS' if (STATUS < 3) then call Meldung1 'STOP' 'GETVAR CDNAME' 'GETVAR BY' 'GETVAR MAXTRACK' if CDNAME="-" then CDNAME=getcatstr(3,'Audio-CD nicht katalogisiert') address value portname lister set handle title CDNAME||" "||BY lister set handle sort name lister set handle busy on lister set handle progress MAXTRACK getcatstr(4,'Erstelle Titelliste ...') lister refresh handle full do i=1 to MAXTRACK lister query handle abort if result then leave lister set handle progress count i lister set handle progress name getcatstr(5,'Titel')' 'i address 'YACDP' 'GETVAR STATUS' if (STATUS < 3) then leave 'GETVAR SONGNAME NUM='i 'GETVAR TRACKLEN NUM='i' T2 MODE=1' 'GETVAR TRACKLEN NUM='i 'GETVAR TRACKSTART NUM='i SONGNAME=TRANSLATE(SONGNAME,"'",'22'x) /* STRIP " */ j=right(i,2) Startblock=right(TRACKSTART,6) Endblock=right(TRACKSTART+TRACKLEN-1,6) address value portname if SONGNAME="-" then SONGNAME='Track 'j' ' lister add handle '"'j" "SONGNAME'" "'TRACKLEN*2352'" -1 0 r '"* "T2' 'Startblock" - "Endblock'' lister set handle display name size comment lister refresh handle full end address 'YACDP' 'GETVAR STATUS' if (STATUS < 3) then do address value portname lister set handle busy off lister clear handle lister refresh handle full iterate end 'GETVAR CDLEN' cdid=CDLEN address value portname lister set handle busy off lister set handle handler 'cdda-handler' 'quotes' /* install traps */ dopus addtrap copy 'cdda-handler' dopus addtrap move 'cdda-handler' dopus addtrap copyas 'cdda-handler' dopus addtrap moveas 'cdda-handler' dopus addtrap delete 'cdda-handler' dopus addtrap rename 'cdda-handler' dopus addtrap devicelist 'cdda-handler' dopus addtrap parent 'cdda-handler' dopus addtrap show 'cdda-handler' dopus addtrap play 'cdda-handler' dopus addtrap protect 'cdda-handler' dopus addtrap datestamp 'cdda-handler' dopus addtrap comment 'cdda-handler' dopus addtrap makedir 'cdda-handler' do forever if waitpkt('cdda-handler') then do packet=getpkt('cdda-handler') if packet='00000000'x then iterate event=getarg(packet,0) handle=getarg(packet,1) titel=getarg(packet,2) user=getarg(packet,3) pathstr=getarg(packet,4) if event="Parent" then leave if event="parent" then leave if event="inactive" then call Ende address 'YACDP' 'GETVAR STATUS' if (STATUS < 3) then leave 'GETVAR CDLEN' if CDLEN~=cdid then leave select when event="doubleclick" then call Player when event="Play" then call SelPlay when event="path" then call SelPlay when event="Show" then call CDTest when event="Copy" then call SaveCD when event="Move" then call SaveCD when event="CopyAs" then call SaveCDAs when event="MoveAs" then call SaveCDAs when event="MakeDir" then iterate when event="dropfrom" then call SaveCD when event="drop" then iterate otherwise call Productinfo end reply(packet,10) end end address value portname lister clear handle lister refresh handle full end /* Ende Schleife bei CD-Wechsel */ /*---------------------------------------------------------------------------------*/ SelPlay: address value portname lister set handle busy on lister query handle selfiles stem files. lister set handle progress files.count getcatstr(6,'Spiele Audio-CD ...') lister refresh handle full do i=0 to files.count-1 lister query handle abort if result then leave lister set handle progress count i+1 lister set handle progress name i+1"/"files.count" "files.i titel=files.i call Player address 'YACDP' 'WAIT ' TRACKSTART+TRACKLEN 'FLAGS='2+128+8192+16384 'STOP' address value portname lister select handle '"'files.i'"' off lister refresh handle full end lister set handle busy off return /*---------------------------------------------------------------------------------*/ Player: address 'YACDP' 'STOP' if CDROMVOLUME>0 then 'PUTVAR CDROMVOL VALUE='CDROMVOLUME if AMIGAVOLUME>0 then 'PUTVAR AMIVOL VALUE='AMIGAVOLUME if CDROMVOLUME>0 then'PUTVAR CDROMBAL VALUE='0 if AMIGAVOLUME>0 then 'PUTVAR AMIBAL VALUE='0 'PUTVAR VIASCSI VALUE='PLAYVIASCSI if PLAYVIASCSI=1 then 'PUTVAR LOWPASSFILTER VALUE='0 'GETVAR TRACKSTART NUM='left(titel,2) 'GETVAR TRACKLEN NUM='left(titel,2) 'PLAYBLOCK ' TRACKSTART return /*---------------------------------------------------------------------------------*/ CDTest: address 'YACDP' 'STOP' 'REQUESTER DUMMY 'getcatstr(8,'"Audio-CD anspielen:"') getcatstr(7,'"Die Titel anspielen für wie lang ?"') getcatstr(9,'"15s|30s|15s ab 0:30|Abbruch"') if DUMMY=0 then return if DUMMY=2 then sec=30 else sec=15 address value portname lister set handle busy on lister query handle selfiles stem files. lister set handle progress files.count getcatstr(10,'Spiele Titel kurz an ...') lister refresh handle full do i=0 to files.count-1 lister query handle abort if result then leave lister set handle progress count i+1 lister set handle progress name i+1"/"files.count" "files.i titel=files.i call Player address 'YACDP' if DUMMY=3 then do 'STOP' 'PLAYBLOCK ' TRACKSTART+75*30 'WAIT ' TRACKSTART+75*45 'FLAGS='2+128+8192+16384 end else 'WAIT ' TRACKSTART+75*sec 'FLAGS='2+128+8192+16384 'STOP' address value portname lister select handle '"'files.i'"' 0 lister refresh handle full end lister set handle busy off return /*---------------------------------------------------------------------------------*/ SaveCDAs: SaveCD: address 'YACDP' 'STOP' 'GETVAR DEVICE' 'GETVAR UNIT' 'REQUESTER DUMMY 'getcatstr(11,'"Speichern von Audiodaten:"') getcatstr(12,'"Bitte das Speicherformat wählen."') getcatstr(13,'"CDR|8SVX|MONO|AIFF|ADPCM3|Abbruch"') if DUMMY=0 then return if DUMMY=1 then FT=".cdr" if DUMMY=2 then FT=".8svx" if DUMMY=3 then FT=".mono" if DUMMY=5 then do if ~exists(CDRip) then do 'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(15,'"Der ADPCM-Saver wurde nicht gefunden (Pfad %s ?)."',CDRip) getcatstr(16,'"Zurück"') return end else FT=".adpcm3" end if DUMMY=4 then do if ~exists(CDSave) then do 'REQUESTER DUMMY 'getcatstr(14,'"Leider ist ein Fehler aufgetreten !"') getcatstr(17,'"Der AIFF-Saver wurde nicht gefunden (Pfad %s ?)."',CDSave) getcatstr(16,'"Zurück"') return end else do FT=".aiff" call open('file','ENV:CDDA_DEVICE',W) call writech('file',DEVICE) call close ('file') call open('file','ENV:CDDA_UNIT',W) call writech('file',UNIT) call close ('file') end end address value portname lister set handle busy on lister set user busy on if event='dropfrom' then do files.count=1 LNG=POS('22'x,titel,2)-1 titel=left(titel,LNG) files.0=right(titel,LNG-1) end else lister query handle selfiles stem files. lister set handle progress files.count getcatstr(18,'Speichere Audiodaten ...') lister refresh handle full lister query user path Zielpfad=result do i=0 to files.count-1 lister query handle abort if result then leave titel=strip(left(substr(files.i,4),24)) lister set handle progress count i+1 lister set handle progress name i+1"/"files.count" "titel||FT address 'YACDP' 'GETVAR TRACKSTART NUM='left(files.i,2) 'GETVAR TRACKLEN NUM='left(files.i,2) if DUMMY=5 then address command CDRip||" "||left(files.i,2)||" to "||'"'Zielpfad||titel||FT'"'||" bits=3 Device="||DEVICE||" Unit="||Unit if DUMMY=4 then address command CDSave||" START="||TRACKSTART||" LENGTH="||TRACKLEN||" FILE="'"'||Zielpfad||titel||FT'"'||" MUTE BUFS=64" else "SAVEAUDIO FILENAME="'"'Zielpfad||titel||FT'"' "STARTBLOCK="TRACKSTART "ENDBLOCK="TRACKSTART+TRACKLEN "COMP="DUMMY "TYPE="DUMMY address command "FILENOTE "||'"'Zielpfad||titel||FT'"'||" "||'"'CDNAME||" "||BY'"' address value portname lister select handle '"'files.i'"' off lister refresh handle full end lister set handle busy off lister set user busy off lister read user Zielpfad force lister refresh user full return /*---------------------------------------------------------------------------------*/ Productinfo: address 'YACDP' do forever 'REQUESTER DUMMY 'getcatstr(19,'"Über PlayCDDA_YACDP.dopus5 V2.1"') getcatstr(20,'"Copyright ©1995 Eckhard Ludwig.*nFrei verteilbare copyrighted Software."') getcatstr(21,'"Beenden|Über CDROM|Hilfe|Ok"') if DUMMY=0 then return if DUMMY=1 then call Ende if DUMMY=2 then do 'GETVAR DEVICE' 'GETVAR UNIT' 'GETVAR BOARD' 'GETVAR PRODUCT' 'GETVAR REVISION' 'GETVAR VENDORID' 'REQUESTER DUMMY "Device='DEVICE' Board='BOARD' Unit='UNIT'" "'VENDORID' 'PRODUCT' Rev.'REVISION'" 'getcatstr(24,'"Zurück"') end else 'REQUESTER DUMMY 'getcatstr(22,'"PlayCDDA_YACDP.dopus5 Hilfe"') getcatstr(23,'"Parent: CD neu einlesen*nDoppelklick: Spielen ab geklickten Titel*nAbspielen: Spiele alle selektierten Titel*nAnzeigen: Spiele alle selektierten Titel kurz an*nKopieren: Selektierte Titel speichern"') getcatstr(24,'"Zurück"') end /*---------------------------------------------------------------------------------*/ Meldung1: do forever if (STATUS = 0) then leave 'REQUESTER DUMMY 'getcatstr(25,'"PlayCDDA_YACDP.dopus5 Fehler"') getcatstr(26,'"Bitte eine Audio-CD einlegen !"') getcatstr(27,'"Beenden|Ok"') if DUMMY=1 then leave 'WAIT 0 321' address value portname lister query handle busy if RC>0 then leave address 'YACDP' 'GETVAR STATUS' if STATUS>2 then return end /*---------------------------------------------------------------------------------*/ Ende: address value portname lister close handle dopus remtrap '*' 'cdda-handler' call closeport('cdda-handler') address 'YACDP' 'GETVAR STATUS' if (STATUS>2) then EJECT QUIT exit /*---------------------------------------------------------------------------------*/ getcatstr: parse arg msgno,msgstring,insert.1,insert.2 if catalog~=0 then msgstring=getcatalogstr(catalog,msgno,msgstring) j=0 do while pos('%s',msgstring)>0 parse var msgstring fore '%s' aft j=j+1 msgstring=fore||insert.j||aft end return msgstring /*---------------------------------------------------------------------------------*/ syntax: SAY "error at line" SIGL ":" RC Return